package com.chen.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.ApiSelector;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;


@Configuration
@EnableSwagger2  //开启swagger2
public class SwaggerConfig {


    //配置swagger的docket
    @Bean
    public Docket getDocket(Environment environment){

        //设置需要开启的环境配置使用Profiles.of进行配置，可变长参数
        Profiles profiles = Profiles.of("dev", "text");
        //使用acceptsProfiles方法获取到这个Profiles配置，并返回boolean类型
        //只需要给enable即可！
        boolean  active = environment.acceptsProfiles(profiles);


        //需要一个document对象
        return new Docket(DocumentationType.SWAGGER_2)
                //swagger分组！
                .groupName("chen")
                //.enable(false);开启和关闭swagger
                .enable(active)
                //apiInfo包含swagger的各种简介信息，需要一个ApiInfo对象传入
                .apiInfo(getApiInfo())
                //select 选择扫描的类型，包或者注解等其他的！
                .select()
                //.apis()获取需要扫描的接口信息
                //any() 获取需要扫描的所有接口
                //basePackage() 获取需要扫描的包（一般使用这个）
                //还有注解！withClassAnnotation:扫描类上面的注解
                //withMethodAnnotation 扫描方法上的注解！
                //paths过滤不必要的请求
                .apis(RequestHandlerSelectors.basePackage("com.chen.controller"))
                .build();


    }

    //创建ApiInfo对象
    private ApiInfo getApiInfo(){

        //作者信息
        Contact contact = new Contact("chen", "https://www.baidu.com", "2667225696@qq.com");

        //apiInfo对象，里面封装了基本信息，因没有set方法所以只能通过构造进行注入
        return new ApiInfo(
                "chen的Api 文档",
                "努力变好",
                "v1.0",
                "https://www.baidu.com",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<VendorExtension>());
    }


}
